package com.itheima.app.controller;

import com.itheima.app.interceptor.UserHolder;
import com.itheima.app.manager.MakeFriendManager;
import com.itheima.domain.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class MakeFriendController {

    @Autowired
    private MakeFriendManager makeFriendManager;

    /**
     * 今日佳人
     *
     * @return 缘分值最高的用户
     */
    @GetMapping("/tanhua/todayBest")
    public RecommendUserVo todayBest() {
        return makeFriendManager.todayBest();
    }


    /**
     * 查看推荐列表
     *
     * @param page     页码
     * @param pagesize 每页条数
     * @return 页面显示对象
     */
    @GetMapping("/tanhua/recommendation")
    public PageBeanVo recommendFriend(@RequestParam(defaultValue = "1") Integer page,
                                      @RequestParam(defaultValue = "10") Integer pagesize) {
        return makeFriendManager.recommendFriend(page, pagesize);
    }

    /**
     * 佳人详细信息
     *
     * @return
     */
    @GetMapping("/tanhua/{bestId}/personalInfo")
    public RecommendUserVo bestUserInfo(@PathVariable("bestId") Long recommendId) {
        return makeFriendManager.bestUserInfo(recommendId);
    }

    /**
     * 查看陌生人问题
     *
     * @param userId 用户id
     * @return 陌生人问题
     */
    @GetMapping("/tanhua/strangerQuestions")
    public String strangerQuestion(Long userId) {
        return makeFriendManager.strangerQuestion(userId);
    }

    /**
     * 查看历史访客
     *
     * @return 历史访客列表
     */
    @GetMapping("/movements/visitors")
    public List<VisitorVo> findVisitorVoList() {
        return makeFriendManager.findVisitorVoList();
    }

    /**
     * 查询附近的人
     * 参数(包含性别和距离)
     *
     * @return 附近的人集合
     */
    @GetMapping("/tanhua/search")
    public List<NearUserVo> findNearbyUser(String gender, Integer distance) {
        return makeFriendManager.findNearbyUser(gender, distance);
    }

    /**
     * app发起请求,获取环信用户名和密码
     *
     * @return
     */
    @GetMapping("/huanxin/user")
    public Map getToken() {
        Map map = new HashMap();
        map.put("username", UserHolder.getId().toString());
        map.put(("password"), "123456");
        return map;
    }

    /**
     * 回复陌生人问题
     *
     * @param map 参数
     */
    @PostMapping("/tanhua/strangerQuestions")
    public void replyStrangerQuestion(@RequestBody Map<String, String> map) {
        //userId:发给谁
        String userId = map.get("userId");
        String reply = map.get("reply");
        makeFriendManager.replyStrangerQuestion(userId, reply);
    }

    /**
     * 添加联系人
     *
     * @param map
     */
    @PostMapping("/messages/contacts")
    public void addContact(@RequestBody Map map) {
        String userId = map.get("userId").toString();
        makeFriendManager.addContact(userId);
    }

    /**
     * 查询好友列表
     *
     * @param page     页码
     * @param pagesize 每页条数
     * @return 页面对象
     */
    @GetMapping("/messages/contacts")
    public PageBeanVo findContactList(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pagesize
    ) {
        return makeFriendManager.findContactList(page, pagesize);
    }


    /**
     * 查询探花卡片
     *
     * @return
     */
    @GetMapping("/tanhua/cards")
    public List findUserCard() {
        PageBeanVo pageBeanVo = makeFriendManager.findUserCard(1, 20);
        return pageBeanVo.getItems();
    }

    /**
     * 右滑喜欢
     *
     * @param likeUserId 喜欢用户id
     */
    @GetMapping("/tanhua/{likeUserId}/love")
    public void saveUserLike(@PathVariable Long likeUserId) {
        makeFriendManager.saveUserLike(likeUserId);
    }

    /**
     * 左滑不喜欢
     *
     * @param unLoveId 不喜欢用户id
     */
    @GetMapping("/tanhua/{unLoveId}/unlove")
    public void unLoveUser(@PathVariable Long unLoveId) {
        makeFriendManager.unLoveUser(unLoveId);
    }

    /**
     * 桃花传音
     * @param soundFile 语音
     */
    @PostMapping("/peachblossom")
    public void peachBlossom(MultipartFile soundFile) throws IOException {
        System.out.println("语音");
        makeFriendManager.peachBlossom(soundFile);
    }

    /**
     * 接收语音
     * @return 语音对象
     */
    @GetMapping("/peachblossom")
    public SoundVo receiveSound() {
        return makeFriendManager.receiveSound();
    }
}
